// 统一中间件

const koaBody = require('koa-bodyparser'); // koa-post解析中间件
const cors = require('@koa/cors'); // 跨域中间件
const koajwt = require('koa-jwt');

const router = require('../router'); // 路由中间件
const formidable = require('./formidable'); // 上传文件中间件
const response = require('./response'); // 返回中间件
const error = require('./error'); // 错误处理中间件
const log = require('./log'); // 日志中间件

/**
 * 跨域处理
 */

const mdCors = cors({
	origin: '*',
	credentials: true,
	allowMethods: ['GET', 'HEAD', 'PUT', 'POST', 'DELETE', 'PATCH']
});

/**
 * 参数解析
 * https://github.com/koajs/bodyparser
 */
const mdFormidable = formidable();
const mdKoaBody = koaBody({
	enableTypes: ['json', 'form', 'text', 'xml'],
	formLimit: '56kb',
	jsonLimit: '1mb',
	textLimit: '1mb',
	xmlLimit: '1mb',
	strict: true
});
// const mdKoaBody = require('koa-body')({
// 	multipart: true, // 允许上传多个文件
// });


/**
 * 统一返回格式
 */
const mdResHandler = response();
/**
 * 错误处理
 */
const mdErrorHandler = error();

/**
 * 路由处理
 */
const mdRoute = router.routes();
const mdRouterAllowed = router.allowedMethods();

/**
 * 记录请求日志
 */
const mdLogger = log();

/* 
	jwt鉴权
 */
const mdJwt = koajwt({
	secret: 'biluo_koa'
}).unless({
	path: [/\/login/]
});

module.exports = [
	mdFormidable,
	mdKoaBody,
	mdCors,
	mdLogger,
	mdResHandler,
	mdErrorHandler,
	mdJwt,
	mdRoute,
	mdRouterAllowed
];
